import re


def parse_one_page(html):
    # 将正则字符串编译成正则表达式对象pattern
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>',
        re.S)
    items = re.findall(pattern, html)
    # 遍历提取结果并生成字典，形成结构数据化。
    for item in items:
        yield {
            'top': item[0],
            'image': item[1],
            'title': item[2].strip(),
            'actor': item[3].strip()[3:] if len(item[3]) > 3 else '',
            'time': item[4].strip()[5:] if len(item[4]) > 5 else '',
            'score': item[5].strip() + item[6].strip()
        }
# for item in parse_one_page(html):
#     print(item)

html=''
with open('猫眼100.html','r',encoding='utf-8') as f:
    html=f.read()
# print(html)
# title_re = '<title>(.*?)</title>'
# titles = re.findall(title_re,html)
# for t in titles:
#     print(t)
#
# url_re = '<a href="(.*?)">.*?</a>'
# article_url = re.findall(url_re,html)
# for art_url in article_url:
#      print(art_url)

# pattern = re.compile('<dd>.*?</dd>',re.S)
# items = re.findall(pattern, html)
# for item in items:
#     print(item)
# 在字符串a中，包含换行符\n，在这种情况下：
# 如果不使用re.S参数，则只在每一行内进行匹配，如果一行没有，就换下一行重新开始。
# 而使用re.S参数以后，正则表达式会将这个字符串作为一个整体，在整体中进行匹配。

# 将正则字符串编译成正则表达式对象pattern
pattern = re.compile(
    '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>',
    re.S)
items = re.findall(pattern, html)
for item in items:
       print( f"'top': {item[0]},'image': {item[1]},'title': {item[2].strip()},'actor': {item[3].strip()[3:] if len(item[3]) > 3 else ''},'time': {item[4].strip()[5:] if len(item[4]) > 5 else ''},'score': {item[5].strip() + item[6].strip()}"
    )